home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.2 Development Libraries / SGI IRIX 6.2 Development Libraries.iso / dist / complib.idb / usr / share / catman / p_man / cat3 / complib / csfft2du.z / csfft2du
Text File  |  1996-03-14  |  9KB  |  199 lines

  1.  
  2.  
  3.  
  4. ccccssssfffffffftttt2222dddduuuu,,,,zzzzddddfffffffftttt2222dddduuuu((((3333FFFF))))                                    ccccssssfffffffftttt2222dddduuuu,,,,zzzzddddfffffffftttt2222dddduuuu((((3333FFFF))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      ccccssssfffffffftttt2222dddduuuu,,,, zzzzddddfffffffftttt2222dddduuuu ---- 2D, Complex-to-Real, Inverse Fast Fourier
  10.      Transforms.
  11.  
  12. SSSSYYYYNNNNOOOOPPPPSSSSYYYYSSSS
  13.      _F_o_r_t_r_a_n :
  14.      ssssuuuubbbbrrrroooouuuuttttiiiinnnneeee ccccssssfffffffftttt2222dddduuuu(((( ssssiiiiggggnnnn,,,, nnnn1111,,,, nnnn2222,,,, aaaarrrrrrrraaaayyyy,,,, llllddddaaaa,,,, ccccooooeeeeffff ))))
  15.           iiiinnnntttteeeeggggeeeerrrr            ssssiiiiggggnnnn,,,, nnnn1111,,,, nnnn2222,,,, llllddddaaaa
  16.           rrrreeeeaaaallll      aaaarrrrrrrraaaayyyy((((llllddddaaaa,,,,nnnn2222)))),,,, ccccooooeeeeffff((((((((nnnn1111++++11115555))))++++2222****((((nnnn2222++++11115555))))))))
  17.  
  18.      ssssuuuubbbbrrrroooouuuuttttiiiinnnneeee zzzzddddfffffffftttt2222dddduuuu(((( ssssiiiiggggnnnn,,,, nnnn1111,,,, nnnn2222,,,, aaaarrrrrrrraaaayyyy,,,, llllddddaaaa,,,, ccccooooeeeeffff ))))
  19.           iiiinnnntttteeeeggggeeeerrrr            ssssiiiiggggnnnn,,,, nnnn1111,,,, nnnn2222,,,, llllddddaaaa
  20.           rrrreeeeaaaallll****8888  aaaarrrrrrrraaaayyyy((((llllddddaaaa,,,,nnnn2222)))),,,, ccccooooeeeeffff((((((((nnnn1111++++11115555))))++++2222****((((nnnn2222++++11115555))))))))
  21.  
  22.  
  23.      _C :
  24.      ####iiiinnnncccclllluuuuddddeeee <<<<fffffffftttt....hhhh>>>>
  25.      iiiinnnntttt ccccssssfffffffftttt2222dddduuuu (((( iiiinnnntttt ssssiiiiggggnnnn,,,, iiiinnnntttt nnnn1111,,,, iiiinnnntttt nnnn2222,,,, ffffllllooooaaaatttt ****aaaarrrrrrrraaaayyyy,,,,
  26.                     iiiinnnntttt llllddddaaaa,,,, ffffllllooooaaaatttt ****ccccooooeeeeffff))));;;;
  27.      iiiinnnntttt zzzzddddfffffffftttt2222dddduuuu (((( iiiinnnntttt ssssiiiiggggnnnn,,,, iiiinnnntttt nnnn1111,,,, iiiinnnntttt nnnn2222,,,, ddddoooouuuubbbblllleeee ****aaaarrrrrrrraaaayyyy,,,,
  28.                     iiiinnnntttt llllddddaaaa,,,, ddddoooouuuubbbblllleeee ****ccccooooeeeeffff))));;;;
  29.  
  30.  
  31. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  32.      ccccssssfffffffftttt2222dddduuuu and zzzzddddfffffffftttt2222dddduuuu compute in place the inverse Fourier transform of
  33.      real 2D sequence of size N1 x N2.  The value F{k,l} of the transform of
  34.      the 2D sequence f{i,j} is equal to:
  35.           F{k,l} = Sum ( W1^(i*k) * W2^(j*l) * f{i,j} ),
  36.                   for i =0,...,(N1-1), j=0,...,(n2-1)
  37.               W1 = exp( (Sign*2*sqrt(-1)*PI) / N1 )
  38.               W2 = exp( (Sign*2*sqrt(-1)*PI) / N2 )
  39.  
  40.  
  41. SSSSttttoooorrrraaaaggggeeee
  42.      It is assumed that the (N1 x N2) 2D sequence is stored along dimension
  43.      N1.  So the index {i+1,j} has an offset of 1 element with respect to
  44.      {i,j}, and {i,j+1} an offset of _l_d_a elements with respect to {i,j}.
  45.      NNNNOOOOTTTTEEEE :::: lda must be larger (or equal) to 2*((N1+2)/2).
  46.  
  47.  
  48. AAAAllllggggoooorrrriiiitttthhhhmmmm
  49.      The complex-to-real Inverse 2D Fourier transform is computed with a row-
  50.      column approach.
  51.       - first, N1 FFTs complex-to-complex of size N2 are preformed,
  52.      stride=lda/2, and leading_dimension=1.
  53.       - then, N2 FFTs complex-to-real of size N1 are evaluated, stride = 1
  54.       and leading_dimension=lda.
  55.  
  56.      As the final sequence has real values, only half of the complex Fourier
  57.      Transform is used.  The sample {(N1-k),l} of the Fourier transform is the
  58.      conjugate of the sample {k,l}.
  59.      However, some extra space is necessary, and the relation
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. ccccssssfffffffftttt2222dddduuuu,,,,zzzzddddfffffffftttt2222dddduuuu((((3333FFFF))))                                    ccccssssfffffffftttt2222dddduuuu,,,,zzzzddddfffffffftttt2222dddduuuu((((3333FFFF))))
  71.  
  72.  
  73.  
  74.      (lda>=2*((N1+2)/2)) must hold.
  75.  
  76.  
  77. PPPPAAAARRRRAAAAMMMMEEEETTTTEEEERRRRSSSS
  78.      SSSSIIIIGGGGNNNN Integer specifying which sign to be used for the expression of W
  79.      (see above) - must be either +1 or -1.
  80.      Unchanged on exit.
  81.  
  82.      NNNN1111 Integer, the first dimension size of the 2D sequence.
  83.      Unchanged on exit.
  84.  
  85.      NNNN2222 Integer, the second dimension size of the 2D sequence.
  86.      Unchanged on exit.
  87.  
  88.      AAAARRRRRRRRAAAAYYYY Array containing the samples of the 2D sequence to be transformed.
  89.      On input, the element {i,j} of the sequence is stored as A(i,j) in
  90.      _F_o_r_t_r_a_n , and A[i+j*lda] in _C.
  91.      On exit, the array is overwritten by its transform.
  92.  
  93.      LLLLDDDDAAAA Integer, leading dimension: increment between the samples of two
  94.      consecutive sub-sequences (e.g between {i,j+1} and {i,j} ).
  95.           Unchanged on exit.
  96.  
  97.      CCCCOOOOEEEEFFFFFFFF Array of at least ( (N+15)+2*(N2+15) ) elements.  On entry it
  98.      contains the Sines/Cosines and factorization of N. COEFF needs to be
  99.      initialized with a call to scfft2dui or dzfft2dui.       Unchanged on
  100.      exit.
  101.  
  102.  
  103. EEEExxxxaaaammmmpppplllleeee ooooffff CCCCaaaalllllllliiiinnnngggg SSSSeeeeqqqquuuueeeennnncccceeee
  104.      Direct then Inverse 2D FFT computed on a 64*1024 sequence of real values.
  105.      The elements of the sequence are stored with increment (stride) 1, and
  106.      the offset between the first element of two succesive sub-sequences
  107.      (leading dimension) is 1026.
  108.      Note : 1026 >= 1024+2 .
  109.      _F_o_r_t_r_a_n
  110.           real array(0:1026-1,0:64-1), coeff(1024+15 + 2*(64+15))
  111.           call scfft2dui( 1024, 64, coeff)
  112.           call csfft2du( -1, 1024, 64, array, 1026, coeff)
  113.           call scfft2du(  1, 1024, 64, array, 1026, coeff)
  114.  
  115.      _C
  116.           #include <fft.h>
  117.           float array[64*1026], *coeff;
  118.           coeff = scfft2dui( 1024, 64, NULL);
  119.           csfft2du( -1, 1024, 64, array, 1026, coeff);
  120.           scfft2du(  1, 1024, 64, array, 1026, coeff);
  121.  
  122.      NNNNOOOOTTTTEEEE____1111 :::: The Direct and Inverse transforms should use opposite signs -
  123.      Which one is used (+1 or -1) for Direct transform is just a matter of
  124.      convention-
  125.  
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. ccccssssfffffffftttt2222dddduuuu,,,,zzzzddddfffffffftttt2222dddduuuu((((3333FFFF))))                                    ccccssssfffffffftttt2222dddduuuu,,,,zzzzddddfffffffftttt2222dddduuuu((((3333FFFF))))
  137.  
  138.  
  139.  
  140.      NNNNOOOOTTTTEEEE____2222 :::: The Fourier Transforms are not normalized so the succession
  141.      Direct-Inverse transform scales the input data by a factor equal to the
  142.      size of the transform.
  143.  
  144. SSSSEEEEEEEE AAAALLLLSSSSOOOO
  145.      fft, scfft2dui, dzfft2dui, csfft2du, zdfft2du, scal2d, dscal2d
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.